package com.demo3;

public class Test {
    public static void main(String[] args) {
        //创建对象
        Animal animal=new Dog();
        animal.eat();

        //多态的弊端
        //不能调用子类的特有功能
        //报错的原因?
        //当调用成员方法的时候，编译看左边，运行看右边
        //那么在编译的时候会先检查左边的父类中有没有这个方法，如果没有直接报错。

        //解决方案:
        //变回子类类型就可以了
//        Dog dog= (Dog) animal;
//        dog.lookHome();

        if(animal instanceof Dog dog){
            dog.lookHome();
        }else if (animal instanceof Cat cat){
            cat.catchMouse();
        }else {
            System.out.println("类型转换失败!");
        }
    }
}
class Animal{
    public void eat(){
        System.out.println("动物在吃东西");
    }
}
class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
    public void lookHome(){
        System.out.println("狗在看家");
    }
}
class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼干");
    }
    public void catchMouse(){
        System.out.println("猫在抓老鼠");
    }
}